package collection02;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**
 * 在使用迭代器遍历集合中容易引发的问题:
 *    需求:定义一个集合,向集合中添加三个字符串:"abc","def","ghk"
 *    当遍历到"ghk"的时候,删除该元素
 * java.util.ConcurrentModificationException:并发修改异常
 *   由于我们在使用迭代器的方法遍历的过程中了,使用了集合的 删除/添加 方法,导致了并发异常
 *   解决:
 *     在使用迭代器遍历的过程中,如果需要增/删元素,使用迭代器的方法来完成,就可以避免这个错误
 *     void remove()
 */
public class CollectionDemo02 {
    public static void main(String[] args) {
        //method01();
        Collection c = new ArrayList();
        c.add("abc");
        c.add("def");
        c.add("ghk");
        //1.获取一个迭代器对象
        Iterator iterator = c.iterator();
        //2.利用迭代器的判断和获取功能
        while (iterator.hasNext()) {
            Object ele = iterator.next();
            if (ele.equals("ghk")) {
                //c.remove(ele);
                iterator.remove();//删除当前迭代器遍历的元素
                                 //[abc, def]
            }
        }
        //3.打印集合
        System.out.println(c);
    }
    /*会引发并发修改异常*/
    private static void method01() {
        Collection c = new ArrayList();
        c.add("abc");
        c.add("def");
        c.add("ghk");
        //1.获取一个迭代器对象
        Iterator iterator = c.iterator();
        //2.利用迭代器的判断和获取功能
        while (iterator.hasNext()) {
            Object ele = iterator.next();
            if (ele.equals("ghk")) {
                c.remove(ele);
            }
        }
        //3.打印集合
        System.out.println(c);
    }
}
